12add0d91Sopenharmony_ci# libc - 提供 C 标准库的rust侧FFI
22add0d91Sopenharmony_ci
32add0d91Sopenharmony_ci[![GHA Status]][GitHub Actions] [![Cirrus CI Status]][Cirrus CI] [![Latest Version]][crates.io] [![Documentation]][docs.rs] ![License]
42add0d91Sopenharmony_ci
52add0d91Sopenharmony_ci## 引入背景
62add0d91Sopenharmony_ci`libc`提供了所有必要的定义,以便在Rust轻松与C
72add0d91Sopenharmony_ci代码(或 "类C "代码)在Rust支持的平台上的调用。这包括
82add0d91Sopenharmony_ci包括类型定义(如`c_int`),常量(如`EINVAL`)以及
92add0d91Sopenharmony_ci函数(例如:`malloc')。
102add0d91Sopenharmony_ci
112add0d91Sopenharmony_cilibc将各类平台中C库的类型、函数和常量导出在根目录下,所以所有项目都可以作为`libc::foo'访问这些API。
122add0d91Sopenharmony_ci所有导出的API的类型和值都与 libc 编译的平台一致。
132add0d91Sopenharmony_ci
142add0d91Sopenharmony_ci关于这个库的设计,更详细的信息可以在这里找到
152add0d91Sopenharmony_ci[associated RFC][rfc].
162add0d91Sopenharmony_ci
172add0d91Sopenharmony_ci[rfc]: https://github.com/rust-lang/rfcs/blob/master/text/1291-promote-libc.md
182add0d91Sopenharmony_ci
192add0d91Sopenharmony_ci## 用法指导
202add0d91Sopenharmony_ci### 使用Openharmony编译框架
212add0d91Sopenharmony_ci在你的"BUILD.gn"中使用deps字段添加对libc crate的依赖,例如:
222add0d91Sopenharmony_ci
232add0d91Sopenharmony_ci```BUILD.gn
242add0d91Sopenharmony_ciohos_rust_shared_library("foo") {
252add0d91Sopenharmony_ci  source = [ "src/lib.rs" ]
262add0d91Sopenharmony_ci  deps = [ "//third_party/rust/crates/libc:lib" ]
272add0d91Sopenharmony_ci}
282add0d91Sopenharmony_ci```
292add0d91Sopenharmony_ci
302add0d91Sopenharmony_ci### 使用Cargo
312add0d91Sopenharmony_ci在你的 "Cargo.toml "中添加以下内容:
322add0d91Sopenharmony_ci
332add0d91Sopenharmony_ci```toml
342add0d91Sopenharmony_ci[dependencies]
352add0d91Sopenharmony_cilibc = "0.2"
362add0d91Sopenharmony_ci```
372add0d91Sopenharmony_ci
382add0d91Sopenharmony_ci## 特点
392add0d91Sopenharmony_ci
402add0d91Sopenharmony_ci* `std`:默认情况下,`libc`链接到标准库。禁用这个
412add0d91Sopenharmony_ci  来消除这一依赖关系,并能够在`#![no_std]`中使用`libc`。
422add0d91Sopenharmony_ci  crates。
432add0d91Sopenharmony_ci
442add0d91Sopenharmony_ci* `extra_traits`: `libc`中实现的所有`结构'都是`Copy`和`Clone`。
452add0d91Sopenharmony_ci  这个特性衍生出了`Debug`、`Eq`、`Hash`和`PartialEq`。
462add0d91Sopenharmony_ci
472add0d91Sopenharmony_ci* `const-extern-fn`: 将一些`extern fn`s改为`const extern fn`s。
482add0d91Sopenharmony_ci  如果你使用Rust >= 1.62,这个功能是隐式启用的。
492add0d91Sopenharmony_ci  否则,它需要一个夜间的Rustc。
502add0d91Sopenharmony_ci
512add0d91Sopenharmony_ci**已废弃**: `use_std`已被废弃,等同于`std`。
522add0d91Sopenharmony_ci
532add0d91Sopenharmony_ci## Rust版本支持
542add0d91Sopenharmony_ci
552add0d91Sopenharmony_ci目前支持的最小Rust工具链版本是**Rust 1.13.0**。(libc 目前没有任何计划关于改变最小支持的支持的 Rust 版本)。需要较新的 Rust 特性的 API 只在较新的 Rust 工具链上可用:
562add0d91Sopenharmony_ci
572add0d91Sopenharmony_ci| Feature              | Version |
582add0d91Sopenharmony_ci|----------------------|---------|
592add0d91Sopenharmony_ci| `union`              |  1.19.0 |
602add0d91Sopenharmony_ci| `const mem::size_of` |  1.24.0 |
612add0d91Sopenharmony_ci| `repr(align)`        |  1.25.0 |
622add0d91Sopenharmony_ci| `extra_traits`       |  1.25.0 |
632add0d91Sopenharmony_ci| `core::ffi::c_void`  |  1.30.0 |
642add0d91Sopenharmony_ci| `repr(packed(N))`    |  1.33.0 |
652add0d91Sopenharmony_ci| `cfg(target_vendor)` |  1.33.0 |
662add0d91Sopenharmony_ci| `const-extern-fn`    |  1.62.0 |
672add0d91Sopenharmony_ci
682add0d91Sopenharmony_ci## 平台支持
692add0d91Sopenharmony_ci
702add0d91Sopenharmony_ci[特定平台文档(master分支)][docs.master]。
712add0d91Sopenharmony_ci
722add0d91Sopenharmony_ci见[`ci/build.sh`](https://github.com/rust-lang/libc/blob/master/ci/build.sh)
732add0d91Sopenharmony_ci关于每个Rust工具链的`libc`保证可以在哪些平台上构建。
742add0d91Sopenharmony_ci工具链的平台。在[GitHub Actions]和[Cirrus CI]中的测试矩阵显示了
752add0d91Sopenharmony_ci`libc`测试运行的平台。
762add0d91Sopenharmony_ci<div class="platform_docs"></div>
772add0d91Sopenharmony_ci
782add0d91Sopenharmony_ci## 许可证
792add0d91Sopenharmony_ci
802add0d91Sopenharmony_ci本项目的授权范围是
812add0d91Sopenharmony_ci
822add0d91Sopenharmony_ci* [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0)
832add0d91Sopenharmony_ci  ([LICENSE-APACHE](https://github.com/rust-lang/libc/blob/master/LICENSE-APACHE))
842add0d91Sopenharmony_ci
852add0d91Sopenharmony_ci* [MIT License](https://opensource.org/licenses/MIT)
862add0d91Sopenharmony_ci  ([LICENSE-MIT](https://github.com/rust-lang/libc/blob/master/LICENSE-MIT))
872add0d91Sopenharmony_ci
882add0d91Sopenharmony_ci[GitHub Actions]: https://github.com/rust-lang/libc/actions
892add0d91Sopenharmony_ci[GHA Status]: https://github.com/rust-lang/libc/workflows/CI/badge.svg
902add0d91Sopenharmony_ci[Cirrus CI]: https://cirrus-ci.com/github/rust-lang/libc
912add0d91Sopenharmony_ci[Cirrus CI Status]: https://api.cirrus-ci.com/github/rust-lang/libc.svg
922add0d91Sopenharmony_ci[crates.io]: https://crates.io/crates/libc
932add0d91Sopenharmony_ci[Latest Version]: https://img.shields.io/crates/v/libc.svg
942add0d91Sopenharmony_ci[Documentation]: https://docs.rs/libc/badge.svg
952add0d91Sopenharmony_ci[docs.rs]: https://docs.rs/libc
962add0d91Sopenharmony_ci[License]: https://img.shields.io/crates/l/libc.svg
972add0d91Sopenharmony_ci[docs.master]: https://rust-lang.github.io/libc/#platform-specific-documentation
982add0d91Sopenharmony_ci
992add0d91Sopenharmony_ci## 开发者贡献
1002add0d91Sopenharmony_ci
1012add0d91Sopenharmony_ci在使用该工具的过程中有任何问题欢迎开发者在社区issue中反馈。
1022add0d91Sopenharmony_ci
1032add0d91Sopenharmony_ci<br>